#include "../wxsitemresdata.h"
#include "wxsrichtextstyleorganiserdialog.h"
#include <wx/richtext/richtextstyledlg.h>


namespace {
  wxsRegisterItem<wxsRichTextStyleOrganiserDialog> Reg( _T( "RichTextStyleOrganiserDialog" ), _T( "动画控制" ), wxsTTool, _T( "对话框" ), 80, false );

  static const long arrStyleValues[] = {
    wxRICHTEXT_ORGANISER_APPLY_STYLES,
    wxRICHTEXT_ORGANISER_CREATE_STYLES,
    wxRICHTEXT_ORGANISER_DELETE_STYLES,
    wxRICHTEXT_ORGANISER_EDIT_STYLES,
    wxRICHTEXT_ORGANISER_OK_CANCEL,
    wxRICHTEXT_ORGANISER_RENAME_STYLES,
    wxRICHTEXT_ORGANISER_RENUMBER,
    wxRICHTEXT_ORGANISER_SHOW_ALL,
    wxRICHTEXT_ORGANISER_SHOW_CHARACTER,
    wxRICHTEXT_ORGANISER_SHOW_LIST,
    wxRICHTEXT_ORGANISER_SHOW_PARAGRAPH
  };

  static const wxChar* arrStyleValueNames[] = {
    _T( "wxRICHTEXT_ORGANISER_APPLY_STYLES" ),
    _T( "wxRICHTEXT_ORGANISER_CREATE_STYLES" ),
    _T( "wxRICHTEXT_ORGANISER_DELETE_STYLES" ),
    _T( "wxRICHTEXT_ORGANISER_EDIT_STYLES" ),
    _T( "wxRICHTEXT_ORGANISER_OK_CANCEL" ),
    _T( "wxRICHTEXT_ORGANISER_RENAME_STYLES" ),
    _T( "wxRICHTEXT_ORGANISER_RENUMBER" ),
    _T( "wxRICHTEXT_ORGANISER_SHOW_ALL" ),
    _T( "wxRICHTEXT_ORGANISER_SHOW_CHARACTER" ),
    _T( "wxRICHTEXT_ORGANISER_SHOW_LIST" ),
    _T( "wxRICHTEXT_ORGANISER_SHOW_PARAGRAPH" ),
    NULL
  };
}


wxsRichTextStyleOrganiserDialog::wxsRichTextStyleOrganiserDialog( wxsItemResData *Data ):
  wxsTool( Data,
           &Reg.Info,
           NULL,
           NULL,
           ( flVariable | flId | flSubclass | flExtraCode ) ),
  m_sCaption( SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_TITLE ),
  m_iFlags( wxRICHTEXT_ORGANISER_SHOW_ALL | wxRICHTEXT_ORGANISER_DELETE_STYLES | wxRICHTEXT_ORGANISER_CREATE_STYLES |
            wxRICHTEXT_ORGANISER_APPLY_STYLES | wxRICHTEXT_ORGANISER_EDIT_STYLES | wxRICHTEXT_ORGANISER_RENAME_STYLES ) {
}


void wxsRichTextStyleOrganiserDialog::OnBuildCreatingCode() {
  wxString sFlags;
  wxString sStyleSheetName = GetCoderContext()->GetUniqueName( _T( "richTextStyleSheet" ) );
  switch( GetLanguage() ) {
  case wxsCPP:
    AddHeader( _T( " <wx/richtext/richtextstyledlg.h>" ), GetInfo().ClassName, 0 );
    for( int i = 0; arrStyleValueNames[i]; i++ ) {
      if( ( m_iFlags & arrStyleValues[i] ) == arrStyleValues[i] ) {
        sFlags << arrStyleValueNames[i] << _T( "|" );
      }
    }
    if( sFlags.IsEmpty() ) {
      sFlags = _T( "0" );
    } else
    { sFlags.RemoveLast(); }
    AddDeclaration( wxString::Format( _T( "wxRichTextStyleSheet  *%s;" ), sStyleSheetName.wx_str() ) );
    Codef( _T( "\t%s = new wxRichTextStyleSheet;\n" ), sStyleSheetName.wx_str() );
    Codef( _T( "%C(%s, %s, NULL, %W, %I, %t, " )
           _T( "SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_POSITION, " )
           _T( "SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_SIZE, " )
           _T( "SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_STYLE);\n" ),
           sFlags.wx_str(), sStyleSheetName.wx_str(), m_sCaption.wx_str() );
    BuildSetupWindowCode();
    break;
  case wxsUnknownLanguage:
  default:
    wxsCodeMarks::Unknown( _T( "wxsRichTextStyleOrganiserDialog::OnBuildCreatingCode" ), GetLanguage() );
  }
}


void wxsRichTextStyleOrganiserDialog::OnEnumToolProperties( M_Code_unused long Flags ) {
  WXS_FLAGS( wxsRichTextStyleOrganiserDialog, m_iFlags, _T( "Style Flags" ), _T( "style_flags" ), arrStyleValues, arrStyleValueNames,
             wxRICHTEXT_ORGANISER_SHOW_ALL | wxRICHTEXT_ORGANISER_DELETE_STYLES | wxRICHTEXT_ORGANISER_CREATE_STYLES
             | wxRICHTEXT_ORGANISER_APPLY_STYLES | wxRICHTEXT_ORGANISER_EDIT_STYLES | wxRICHTEXT_ORGANISER_RENAME_STYLES )
  WXS_SHORT_STRING( wxsRichTextStyleOrganiserDialog, m_sCaption, _T( "Caption" ), _T( "caption" ), SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_TITLE, true );
}
